import jieba.analyse
import pandas as pd
from base_handle import BaseHandle # 引入工具类

baseHandle = BaseHandle() #实例化

'''
2.1 TF-IDF 关键词权值计算
'''

def words_weight(url):
    '''TF-IDF关键词权值计算'''
    text = baseHandle.read_col_merge_file(url) #引入语料 excel 数据
    diy_dict=(baseHandle.get_file_abspath('物流词汇大全.txt')) #引入自定义词典
    jieba.load_userdict(diy_dict) #加载自定义字典
    # 第一个参数：待提取关键词的文本
    # 第二个参数：返回关键词的数量，重要性从高到低排序!!
    # 第三个参数：是否同时返回每个关键词的权重
    # 第四个参数：词性过滤，为空表示不过滤，若提供则仅返回符合词性要求的关键词
    keywords_list = jieba.analyse.extract_tags(text, topK=None, withWeight=True, allowPOS=())
    #print(keywords_list)#以列表形式
    df = pd.DataFrame(keywords_list,columns=['keyword', 'weight'])# list转dataframe
    df.to_excel("TF-IDF关键词权值计算表.xlsx", index=False)# 保存到本地excel
    #jieba自己本来就拥有的一个比较大众化的语料库。因此对于相对来说比较大众化的文本数据处理，jieba自带的TF-IDF语料库可以完美契合我们的诉求。

def words_ididf_match(keywords_list):
    '''关键词批量匹配权重'''
    df = pd.read_excel('TF-IDF关键词权值计算表.xlsx', sheet_name='Sheet1')
    b1 = []
    b2 = []
    for i in range(len(df)):
        keyword = df.loc[i,'keyword']
        if any(word if word == keyword else False for word in keywords_list): #判断列表(list)内一个或多个元素是否与关键词相同
            a1 = df.loc[i,'keyword']
            a2 = df.loc[i,'weight']
            b1.append(a1)
            b2.append(a2)
        else:
            continue
    f1 = pd.DataFrame(columns=['关键词', '权重'])
    f1['关键词'] = b1
    f1['权重'] = b2
    f1.to_excel("物流关键词词库权值计算表.xlsx", index=False)# 保存到本地excel


if __name__ == "__main__":
    # words_weight(baseHandle.get_file_abspath('语料库_京东_5000条评论.xlsx'))

    words_ididf_match(baseHandle.logistics_list)